/**
 * @file MainWindow.h
 * @brief 主窗口类头文件
 * @details 定义了应用程序的主窗口界面
 */

#ifndef MAIN_WINDOW_H
#define MAIN_WINDOW_H

#include <Window.h>
#include <View.h>
#include <Button.h>
#include <StringView.h>
#include <FilePanel.h>
#include <MenuBar.h>
#include <MenuItem.h>
#include <String.h>
#include <Path.h>
#include <RadioButton.h>
#include <CheckBox.h>
#include <TextControl.h>
#include <Box.h>
#include <TabView.h>
#include <ListView.h>
#include <ColumnListView.h>

#include "../core/HZipEngine.h"

/**
 * @class MainWindow
 * @brief 应用程序主窗口类
 * @details 实现了压缩/解压缩软件的主界面
 */
class MainWindow : public BWindow
{
public:
    /**
     * @brief 构造函数
     * @param frame 窗口位置和大小
     */
    MainWindow(BRect frame);

    /**
     * @brief 析构函数
     */
    virtual ~MainWindow();

    /**
     * @brief 消息处理函数
     * @param message 收到的消息
     */
    virtual void MessageReceived(BMessage *message);

    /**
     * @brief 窗口退出处理函数
     */
    virtual bool QuitRequested();

private:
    /**
     * @brief 初始化界面
     */
    void _InitInterface();

    /**
     * @brief 创建菜单栏
     * @return 创建的菜单栏
     */
    BMenuBar *_CreateMenuBar();

    /**
     * @brief 执行压缩操作
     */
    void _DoCompress();

    /**
     * @brief 执行解压缩操作
     */
    void _DoExtract();

    /**
     * @brief 显示关于对话框
     */
    void _ShowAbout();

    // 界面控件
    BView *fMainView;
    BButton *fCompressButton;
    BButton *fExtractButton;
    BStringView *fStatusView;

    // 主界面控件
    BTabView *fTabView;             // 标签页视图
    BView *fHomeView;               // 主页视图
    BView *fCompressView;           // 压缩视图
    BView *fExtractView;            // 解压视图
    BColumnListView *fFileListView; // 文件列表视图
    BButton *fAddButton;            // 添加文件按钮
    BButton *fRemoveButton;         // 删除文件按钮
    BButton *fStartButton;          // 开始操作按钮
    BFont *fIconFont;               // 图标字体

    // 压缩配置界面控件
    BRadioButton *fSpeedRadioButton;    // 速度最快选项
    BRadioButton *fSizeRadioButton;     // 体积最小选项
    BRadioButton *fCustomRadioButton;   // 自定义选项
    BCheckBox *fPasswordCheckBox;       // 添加密码选项
    BTextControl *fPasswordTextControl; // 密码输入框
    BStringView *fSmartTipView;         // 智能压缩提示

    // 压缩和解压配置界面控件
    BBox *fConfigBox;                 // 压缩配置框
    BBox *fExtractConfigBox;          // 解压配置框
    BStringView *fTargetDirView;      // 目标路径显示
    BCheckBox *fSmartDeleteCheckBox;  // 智能删除多余文件类型选项
    BCheckBox *fKeepBrokenCheckBox;   // 保留损坏文件选项
    BCheckBox *fNoSubdirCheckBox;     // 不解压到子目录选项
    BCheckBox *fExtractLaterCheckBox; // 解压后解压选项
    BButton *fSaveSettingsButton;     // 保存设置按钮
    BButton *fExtractNowButton;       // 立即解压按钮
    BFilePanel *fExtractDirPanel;     // 解压目录选择面板

    // 文件选择面板
    BFilePanel *fOpenPanel;
    BFilePanel *fSavePanel;

    // 压缩/解压缩引擎
    HZipEngine fEngine;

    // 当前操作的文件路径
    BPath fSourcePath;
    BPath fTargetPath;

    // 当前选择的压缩格式
    BString fCurrentFormat;
};

// 消息常量
enum
{
    MSG_MENU_FILE_OPEN = 'mfop',
    MSG_MENU_FILE_SAVE = 'mfsv',
    MSG_MENU_FILE_QUIT = 'mfqt',
    MSG_MENU_HELP_ABOUT = 'mhab',
    MSG_BTN_COMPRESS = 'btnc',
    MSG_BTN_EXTRACT = 'btne',
    MSG_FORMAT_SELECTED = 'frms',
    MSG_FILE_PANEL_OPEN = 'fpop',
    MSG_FILE_PANEL_SAVE = 'fpsv',
    MSG_COMPRESS_SPEED = 'cmsp',        // 速度最快选项
    MSG_COMPRESS_SIZE = 'cmsz',         // 体积最小选项
    MSG_COMPRESS_CUSTOM = 'cmcu',       // 自定义选项
    MSG_PASSWORD_TOGGLE = 'pwtg',       // 密码开关
    MSG_EXTRACT_DIR_SELECTED = 'exds',  // 解压目录选择
    MSG_EXTRACT_OPTION_TOGGLE = 'exot', // 解压选项切换
    MSG_EXTRACT_SAVE_SETTINGS = 'exss', // 保存解压设置
    MSG_TAB_CHANGED = 'tabc',           // 标签页切换
    MSG_ADD_FILES = 'addf',             // 添加文件
    MSG_REMOVE_FILES = 'rmvf',          // 删除文件
    MSG_START_OPERATION = 'strt'        // 开始操作
};

#endif // MAIN_WINDOW_H